package com.线程Thread;
@SuppressWarnings("all")
public class Runnable_VS_Thread {
    public static void main(String[] args) {
        /** 继承Thread和实现Runnable的区别：（建议使用Runnable）
         *  1.从本质上没有区别，都是通过调用start（）->start0()->来调用重写run()方法；
         * 2.实现Runnable接口避免了单继承限制；
         * 3.实现Runnable接口方法更加适合多个线程共享一个资源：
         * 例如：
         * AA a = new AA();
         * Thread thread1 = new Thread(a);
         * Thread thread2 = new Thread(a);
         * thread1.start();
         * thread2.start();
         *
         */
        AA a = new AA();
        Thread thread1 = new Thread(a);
        Thread thread2 = new Thread(a);
        thread1.start();  //启动一个线程，调用的是a的run方法
        thread2.start();  //再次启动线程不用创建新的对象，调用的还是a的run方法
        // 进而可以多个线程共享一个资源；

        BB bb = new BB();
        bb.start();
//        bb.start();  //再启动一次该线程会报错，IllegalThreadStateException 非法线程状态异常
//        每次启动线程都要创建新的对象才行，所以不适合共享一个资源

    }
}

class AA implements Runnable {
    int a = 0;
    @Override
    public void run() {
        System.out.println(a++);
    }
}

class BB extends Thread {
    int a = 0;
    @Override
    public void run() {
        System.out.println(a++);
    }
}